package org.constellation.admin.util;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import org.geotoolkit.metadata.ImageStatistics;
/**
* @author Quentin Boileau (Geomatys)
*/
public class ImageStatisticSerializer extends JsonSerializer<ImageStatistics> {
@Override
public void serialize(ImageStatistics imageStatistics, JsonGenerator jsonGen, SerializerProvider serializerProvider)
throws IOException, JsonProcessingException {
jsonGen.writeStartObject();
jsonGen.writeArrayFieldStart("bands");
ImageStatistics.Band[] bands = imageStatistics.getBands();
for (int i = 0; i < bands.length; i++) {
final ImageStatistics.Band band = bands[i];
jsonGen.writeStartObject();
jsonGen.writeNumberField("index", band.getBandIndex());
if (band.getName() != null) {
jsonGen.writeStringField("name", band.getName());
}
if (band.getDataType() != null) {
jsonGen.writeStringField("dataType", band.getDataType().name());
}
jsonGen.writeNumberField("min", band.getMin());
jsonGen.writeNumberField("max", band.getMax());
jsonGen.writeNumberField("mean", band.getMean());
jsonGen.writeNumberField("std", band.getStd());
if (band.getNoData() != null) {
jsonGen.writeArrayFieldStart("noData");
for (int j = 0; j < band.getNoData().length; j++) {
jsonGen.writeNumber(band.getNoData()[j]);
}
jsonGen.writeEndArray();//noData
}
if (band.getHistogram() != null) {
final long[] distrib = band.tightenHistogram(255);
jsonGen.writeArrayFieldStart("histogram");
for (int j = 0; j < distrib.length; j++) {
jsonGen.writeNumber(distrib[j]);
}
jsonGen.writeEndArray();//histogram
}
jsonGen.writeEndObject();//end band
}
jsonGen.writeEndArray();
jsonGen.writeEndObject();
}
}